/**********************************************************************************************/
/* FBL_I_LogFile.h	                                                      					  */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2006															  */
/* All Rights Reserved                                                   					  */
/**********************************************************************************************/

#ifndef _FBL_I_LogFile_h
	#define _FBL_I_LogFile_h
#pragma once

#include <VShared/FBL/publ/Headers/FBL.h>

#include <VShared/FBL/publ/Headers/FBL_pre_header.h>


/**********************************************************************************************/
FBL_Begin_Namespace


/**********************************************************************************************/
// forward declarations: 
//
class String;
 
SMART_INTERFACE(I_LogFile);


/**********************************************************************************************/
FBL_SHARED_EXP	I_LogFile* 	CreateLogFile( 
								const String& inLogFileName, 
								uchar inVerboseLevel = 255,
								bool inFlushEachStep = false );	


/**********************************************************************************************/
FBL_SHARED_EXP	I_LogFile* 	CreateLogFile(
								const String& inLogFolderPath,
								const String& inLogFileName, 
								uchar inVerboseLevel = 255,
								bool inFlushEachStep = false );	


/**********************************************************************************************/
// Interface class -- log file.
// 
interface FBL_SHARED_EXP_CLASS I_LogFile : public I_Unknown
{

virtual 					~I_LogFile( void );

	// ---------------------
	// Properties:

							// VerbosLevel of LogFile. 0 level - nothing write.
							// The higher level the more verbose is Log.	
virtual	uchar				get_VerboseLevel( void ) const 	  	= 0;	
virtual	void				put_VerboseLevel( uchar inLevel ) 	= 0;


	// --------------------
	// Stream operators:
	
virtual	I_LogFile&			operator<<( char s ) 				= 0; //KEEPAS: mLogFile

virtual	I_LogFile&			operator<<( uchar s ) 				= 0; //KEEPAS: mLogFile

virtual	I_LogFile&			operator<<( short s ) 				= 0; //KEEPAS: mLogFile
virtual	I_LogFile&			operator<<( ushort s ) 				= 0; //KEEPAS: mLogFile

virtual	I_LogFile&			operator<<( long s ) 				= 0; //KEEPAS: mLogFile
virtual	I_LogFile&			operator<<( ulong s ) 				= 0; //KEEPAS: mLogFile

virtual	I_LogFile&			operator<<( llong s ) 				= 0; //KEEPAS: mLogFile
virtual	I_LogFile&			operator<<( ullong s ) 				= 0; //KEEPAS: mLogFile

virtual	I_LogFile&			operator<<( float s ) 				= 0; //KEEPAS: mLogFile
virtual	I_LogFile&			operator<<( double s ) 				= 0; //KEEPAS: mLogFile
 
virtual	I_LogFile&			operator<<( const char* s ) 		= 0; //KEEPAS: mLogFile

virtual	I_LogFile&			operator<<( const UChar* s )		= 0; //KEEPAS: mLogFile

virtual void				Flush( void )						= 0;
virtual void				Close( void )						= 0;

}; 


/**********************************************************************************************/
FBL_End_Namespace


/**********************************************************************************************/
#include <VShared/FBL/publ/Headers/FBL_post_header.h>


/**********************************************************************************************/
#endif // _FBL_I_LogFile_h
